代码 > golang pprof记录
2021-07-07
mud 客户端有内存泄露,调试了一把,记录一下。
首先,引入 profile库
import "net/http/pprof"
然后合适的地方引入
runtime.SetBlockProfileRate(int(10 * time.Second))
runtime.SetMutexProfileFraction(int(10 * time.Second))
Router.Handle("/debug/pprof/").HandleFunc(pprof.Index)
Router.Handle("/debug/pprof/cmdline").HandleFunc(pprof.Cmdline)
Router.Handle("/debug/pprof/profile").HandleFunc(pprof.Profile)
Router.Handle("/debug/pprof/symbol").HandleFunc(pprof.Symbol)
Router.Handle("/debug/pprof/trace").HandleFunc(pprof.Trace)
SetBlockProfileRate是设置记录block的代码的值,单位是纳秒
SetMutexProfileFraction是设置记录锁起效代码的值。
然后打开debug/pprof页面
allocs 4 block 0 cmdline 17 goroutine 232 heap 0 mutex 0 profile 21 threadcreate 0 trace
其中重点关注的是 goroutine,heap,block几块
goroutine是看实时的goroutine数量和发起位置。如果不停增长,可能是泄露
heap是堆,数值是一直增长的。点入后看到的数据,建议加上gc=1参数强制gc一次
第一行的数字大概是
2: 58368 [2474: 8919408] @ heap/1048576
第二个数字58368是当前堆内存大小,最后一个数字1048576是最大使用的堆内存
然后是按当前使用内存大小的堆信息,大概是
1: 57344 [1: 57344]
第一个57344是当前使用的堆内存
方括号内的57344是最大使用过的堆内存。
点击登录